package com.zzyl.service;

import com.zzyl.base.PageResponse;
import com.zzyl.dto.PendingTasksDto;
import com.zzyl.entity.PendingTasks;
import com.zzyl.entity.User;

import java.util.Map;

/**
 * @author sjqn
 * @date 2023/11/9
 */
public interface ActFlowCommService {

    /**
     * 获取下一个审核人
     * @param processDefinitionKey
     * @param businessKey
     * @return
     */
    public Long getNextAssignee(String processDefinitionKey, String businessKey);


    /**
     * 启动流程实例，并且自动执行首页点
     * @param id                   业务id
     * @param user                 当前登录用户
     * @param processDefinitionKey 流程定义的key
     * @param variables            流程变量参数
     * @param isAuto               是否自动完成
     */
    public void start(Long id, User user, String processDefinitionKey, Map<String, Object> variables, boolean isAuto);

    /**
     * 分页条件查询我的任务列表（待办 | 我的申请）
     * @param pendingTasksDto
     * @return
     */
    PageResponse<PendingTasks> getMyTaskList(PendingTasksDto pendingTasksDto);

    /**
     * 判断当前任务的formKey是否与状态匹配
     * @param taskId  当前登录人的任务id
     * @param flowStatus  前端传递的流程状态
     * @param dbFlowStatus  数据库的状态（单子的最终状态）
     * @return
     */
    Integer isCurrentUserAndStep(String taskId,Integer flowStatus,Integer dbFlowStatus);


    /**
     * 完成任务
     * @param title  标题
     * @param taskId  任务id
     * @param userId  用户id
     * @param code    ops(1 通过  2 拒绝   3 驳回)
     * @param status  审核状态（ 1，申请中  2 已完成   3  已关闭）
     */
    void completeProcess(String title, String taskId, String userId, Integer code, Integer status);

    /**
     * 撤回任务
     *
     * @param taskId
     * @param first  是否默认退回流程第一个节点，true 是,false默认是上一个节点，
     */
    public void withdrawTask(String taskId, boolean first);

    /**
     * 撤销
     * @param taskId
     */
    void cancelProcess(String taskId);
}
